/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * PanelConsultaNoPredefinida.java
 *
 * Created on 2/01/2012, 05:08:11 PM
 */
package gui;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import manejadorConsultas.ConsultasDatamart;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.plot.PlotOrientation;

/**
 *
 * @author jorgeorm
 */
public class PanelConsultaPredefinida extends javax.swing.JPanel {

    public static void dbg(Object...o){
        System.out.println(o);
    }
    /** Creates new form PanelConsultaNoPredefinida */
    public PanelConsultaPredefinida() {
        super();
        initComponents();
        consultar = new ConsultasDatamart();
        
        jp_menuEstrellas.setLayout(new BoxLayout(jp_menuEstrellas, BoxLayout.Y_AXIS));
        jp_menuEstrellas.add(createMenuBar());
       
        this.setVisible(true);
    }
    
     /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jp_menuEstrellas = new javax.swing.JPanel();
        jfc_torta= org.jfree.chart.ChartFactory.createPieChart3D("Torta", null, true, true, new java.util.Locale("es","CO"));
        cp_torta = new org.jfree.chart.ChartPanel(jfc_torta);
        jtp_pansGraficas = new javax.swing.JTabbedPane();

        setMaximumSize(new java.awt.Dimension(999, 549));
        setPreferredSize(new java.awt.Dimension(999, 549));

        javax.swing.GroupLayout jp_menuEstrellasLayout = new javax.swing.GroupLayout(jp_menuEstrellas);
        jp_menuEstrellas.setLayout(jp_menuEstrellasLayout);
        jp_menuEstrellasLayout.setHorizontalGroup(
            jp_menuEstrellasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 207, Short.MAX_VALUE)
        );
        jp_menuEstrellasLayout.setVerticalGroup(
            jp_menuEstrellasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 548, Short.MAX_VALUE)
        );

        cp_torta.setPreferredSize(new java.awt.Dimension(762, 271));

        javax.swing.GroupLayout cp_tortaLayout = new javax.swing.GroupLayout(cp_torta);
        cp_torta.setLayout(cp_tortaLayout);
        cp_tortaLayout.setHorizontalGroup(
            cp_tortaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 756, Short.MAX_VALUE)
        );
        cp_tortaLayout.setVerticalGroup(
            cp_tortaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 271, Short.MAX_VALUE)
        );

        jfc_chartBarras=org.jfree.chart.ChartFactory.createBarChart3D("Barras", "Clases", "Cuentas", null, org.jfree.chart.plot.PlotOrientation.HORIZONTAL, true, true, true);
        jfc_chartLineas=org.jfree.chart.ChartFactory.createLineChart3D("Tortas", "Clases", "Cuentas", null, org.jfree.chart.plot.PlotOrientation.HORIZONTAL, true, true, true);
        cp_lineas=new org.jfree.chart.ChartPanel(jfc_chartLineas);
        //cp_lineas.setSize(jtp_pansGraficas.getPreferredSize());
        cp_barra=new org.jfree.chart.ChartPanel(jfc_chartBarras);
        //cp_barra.setSize(jtp_pansGraficas.getPreferredSize());
        //jsp_lineas=new javax.swing.JScrollPane(cp_lineas);
        //jsp_barras=new javax.swing.JScrollPane(cp_barra);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jp_menuEstrellas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(cp_torta, javax.swing.GroupLayout.DEFAULT_SIZE, 756, Short.MAX_VALUE)
                    .addComponent(jtp_pansGraficas, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 756, Short.MAX_VALUE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jp_menuEstrellas, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jtp_pansGraficas, javax.swing.GroupLayout.PREFERRED_SIZE, 271, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(cp_torta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(cp_torta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        jtp_pansGraficas.addTab("Representación Lineas", cp_lineas);
        jtp_pansGraficas.addTab("Representación Barras", cp_barra);
    }// </editor-fold>//GEN-END:initComponents

    //Crea los JMenu de la barra. Se exponen las estrellas consultables
    public JMenuBar createMenuBar()
    {
        menuBar = new JMenuBar();
        menuBar.setLayout(new BoxLayout(menuBar, BoxLayout.PAGE_AXIS));
        menuBar.add(createMenu1("Matricula"));
        menuBar.add(createMenu2("Cancelaciones"));
        menuBar.add(createMenu3("Matricula por Locacion"));

        menuBar.setBorder(BorderFactory.createMatteBorder(0,0,0,1,
                                                          Color.BLACK));
        return menuBar;
    }
    
    // Menu para crear consultas en ESTRELLA MATRICULA
    public JMenu createMenu1(String title)
    {
        JMenu m = new VerticalMenu(title);
        
        consulta1 = new JMenuItem("Matriculas por día");
        consulta1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                try
                {
                    consultar.consultaPredefinida(1);
                    jfc_torta= ChartFactory.createPieChart3D("Matriculas por día", consultar.getRsAsPieDataset(), true, true, false);
                    jfc_chartLineas = ChartFactory.createLineChart3D("Matriculas por día", "Dia de Matricula", "Cantidad Matriculas", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    jfc_chartBarras = ChartFactory.createBarChart3D("Matriculas por día", "Dia de Matricula", "Cantidad Matriculas", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    ((ChartPanel)cp_torta).setChart(jfc_torta);
                    cp_lineas.setChart(jfc_chartLineas);
                    cp_barra.setChart(jfc_chartBarras);
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
        });
        consulta1.setToolTipText("Cantidad de Matriculas Realizadas en cada dia de la semana destinado a dicho proceso");
        m.add(consulta1);
        
        consulta2 = new JMenuItem("Matriculas por Sexo");
        consulta2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
               try
                {
                    consultar.consultaPredefinida(2);
                    jfc_torta= ChartFactory.createPieChart3D("Matriculas por Sexo", consultar.getRsAsPieDataset(), true, true, false);
                    jfc_chartLineas = ChartFactory.createLineChart3D("Matriculas por Sexo", "Sexo", "Cantidad Matriculas", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    jfc_chartBarras = ChartFactory.createBarChart3D("Matriculas por Sexo", "Sexo", "Cantidad Matriculas", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    ((ChartPanel)cp_torta).setChart(jfc_torta);
                    cp_lineas.setChart(jfc_chartLineas);
                    cp_barra.setChart(jfc_chartBarras);
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
        });
        consulta2.setToolTipText("Cantidad de matriculas realizas segun el sexo de la persona");
        m.add(consulta2);
        
        consulta3 = new JMenuItem("Promedio Asignaturas Matriculadas por sexo");
        consulta3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                try
                {
                    consultar.consultaPredefinida(3);
                    System.out.println("envie la query3");
                    jfc_torta= ChartFactory.createPieChart3D("Promedio Asignaturas Matriculadas por sexo", consultar.getRsAsPieDataset(), true, true, false);
                    jfc_chartLineas = ChartFactory.createLineChart3D("Promedio Asignaturas Matriculadas por sexo", "Sexo", "Promedio asignaturas", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    jfc_chartBarras = ChartFactory.createBarChart3D("Promedio Asignaturas Matriculadas por sexo", "Sexo", "Promedio asignaturas", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    ((ChartPanel)cp_torta).setChart(jfc_torta);
                    cp_lineas.setChart(jfc_chartLineas);
                    cp_barra.setChart(jfc_chartBarras);
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                    
                }
            }
        });
        consulta3.setToolTipText("Reporte de asignaturas matriculadas");
        m.add(consulta3);
        
        return m;
    }
    // Menu para crear consultas en ESTRELLA CANCELACIONES
    public JMenu createMenu2(String title)
    {
        JMenu m = new VerticalMenu(title);
        
        consulta1 = new JMenuItem("Cancelaciones por Estado Civil");
        consulta1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                
                try
                {
                    consultar.consultaPredefinida(4);
                    jfc_torta= ChartFactory.createPieChart3D("Cancelaciones por Estado Civil", consultar.getRsAsPieDataset(), true, true, false);
                    jfc_chartLineas = ChartFactory.createLineChart3D("Asignaturas Canceladas por Estado Civil", "Estado Civil", "Cantidad Cancelaciones", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    jfc_chartBarras = ChartFactory.createBarChart3D("Asignaturas Canceladas por Estado Civil", "Estado Civil", "Cantidad Cancelaciones", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    ((ChartPanel)cp_torta).setChart(jfc_torta);
                    cp_lineas.setChart(jfc_chartLineas);
                    cp_barra.setChart(jfc_chartBarras);
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
        });
        consulta1.setToolTipText("Cantidad de cancelaciones hechas por los estudiantes, diferenciadas segpún  el estado civil de los mismos");
        m.add(consulta1);
        
        consulta2 = new JMenuItem("Cancelaciones por Estrato Socioeconómico");
        consulta2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                
                try
                {
                    consultar.consultaPredefinida(5);
                    jfc_torta= ChartFactory.createPieChart3D("Cancelaciones por Estrato Socioeconómico", consultar.getRsAsPieDataset(), true, true, false);
                    jfc_chartLineas = ChartFactory.createLineChart3D("Cancelaciones por Estrato Socioeconómico", "Estrato Socioeconómico", "Cantidad Cancelaciones", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    jfc_chartBarras = ChartFactory.createBarChart3D("Cancelaciones por Estrato Socioeconómico", "Estrato Socioeconómico", "Cantidad Cancelaciones", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    ((ChartPanel)cp_torta).setChart(jfc_torta);
                    cp_lineas.setChart(jfc_chartLineas);
                    cp_barra.setChart(jfc_chartBarras);
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
        });
        consulta2.setToolTipText("Cantidad de cancelaciones hechas por los estudiantes, diferenciadas según  el estrato socioeconómico de los mismos");
        m.add(consulta2);
        
        consulta3 = new JMenuItem("Cancelaciones por Franja Horaria");
        consulta3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                
                try
                {
                    consultar.consultaPredefinida(6);
                    jfc_torta= ChartFactory.createPieChart3D("Cancelaciones por Franja Horaria", consultar.getRsAsPieDataset(), true, true, false);
                    jfc_chartLineas = ChartFactory.createLineChart3D("Cancelaciones por Franja Horaria", "Franja Horaria", "Cantidad Cancelaciones", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    jfc_chartBarras = ChartFactory.createBarChart3D("Cancelaciones por Franja Horaria", "Franja Horaria", "Cantidad Cancelaciones", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    ((ChartPanel)cp_torta).setChart(jfc_torta);
                    cp_lineas.setChart(jfc_chartLineas);
                    cp_barra.setChart(jfc_chartBarras);
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
        });
        consulta3.setToolTipText("Cantidad de cancelaciones hechas por los estudiantes, diferenciadas según la franja horaria en la que se realizó la transacción");
        m.add(consulta3);
        
        return m;
    }
    
    // Menu para crear consultas en TABLA AGREGADA: MATRICULAXLOCACION
    public JMenu createMenu3(String title)
    {
        JMenu m = new VerticalMenu(title);
        
        consulta1 = new JMenuItem("Matriculas por hora, fuera de las instalaciones de la Universidad");
        consulta1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                
                try
                {
                    consultar.consultaPredefinida(7);
                    jfc_torta= ChartFactory.createPieChart3D("Matriculas por hora, fuera de las instalaciones de la Universidad", consultar.getRsAsPieDataset(), true, true, false);
                    jfc_chartLineas = ChartFactory.createLineChart3D("Matriculas por hora, fuera de las instalaciones de la Universidad", "Hora", "Cantidad Cancelaciones", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    jfc_chartBarras = ChartFactory.createBarChart3D("Matriculas por hora, fuera de las instalaciones de la Universidad", "Hora", "Cantidad  Cancelaciones", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    ((ChartPanel)cp_torta).setChart(jfc_torta);
                    cp_lineas.setChart(jfc_chartLineas);
                    cp_barra.setChart(jfc_chartBarras);
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
        });
        consulta1.setToolTipText("Total de Matriculas realizadas usando recursos de la Universidad del Valle, es decir, "
                + "usando la red interna del campus, y diferenciadas por hora");
        m.add(consulta1);
        
        consulta2 = new JMenuItem("Matriculas por hora, dentro del Campus de la Universidad");
        consulta2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                
                try
                {
                    consultar.consultaPredefinida(8);
                    jfc_torta= ChartFactory.createPieChart3D("Matriculas por hora, dentro del Campus de la Universidad", consultar.getRsAsPieDataset(), true, true, false);
                    jfc_chartLineas = ChartFactory.createLineChart3D("Matriculas por hora, dentro del Campus de la Universidad", "Hora", "Cantidad Matriculas en UV", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    jfc_chartBarras = ChartFactory.createBarChart3D("Matriculas por hora, dentro del Campus de la Universidad", "Hora", "Cantidad  Matriculas en UV", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    ((ChartPanel)cp_torta).setChart(jfc_torta);
                    cp_lineas.setChart(jfc_chartLineas);
                    cp_barra.setChart(jfc_chartBarras);
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
        });
        consulta2.setToolTipText("Total de Matriculas realizadas dentro del Campus de la Universidad del Valle, es decir, usando conexiones "
                + "de la red interna del campus, y diferenciadas por hora");
        m.add(consulta2);
        
        consulta3 = new JMenuItem("Matriculas por jornada, fuera del Campus de la Universidad");
        consulta3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                
                try
                {
                    consultar.consultaPredefinida(9);
                    jfc_torta= ChartFactory.createPieChart3D("Matriculas por jornada, fuera del Campus de la Universidad", consultar.getRsAsPieDataset(), true, true, false);
                    jfc_chartLineas = ChartFactory.createLineChart3D("Matriculas por jornada, fuera del Campus de la Universidad", "Jornada", "Cantidad Matriculas fuera de UV", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    jfc_chartBarras = ChartFactory.createBarChart3D("Matriculas por jornada, fuera del Campus de la Universidad", "Jornada", "Cantidad  Matriculas fuera de UV", consultar.getRsAsCategoryDataset(), PlotOrientation.VERTICAL, true, true, true);
                    ((ChartPanel)cp_torta).setChart(jfc_torta);
                    cp_lineas.setChart(jfc_chartLineas);
                    cp_barra.setChart(jfc_chartBarras);
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
        });
        consulta3.setToolTipText("Total de Matriculas realizadas fuera del Campus de la Universidad del Valle, es decir, usando conexiones "
                + "de la red interna del campus, y diferenciadas por jornada del dia");
        m.add(consulta3);
        
        return m;
    }
  
      
    private JMenuBar menuBar;
    //MenuItem de Consultas en ESTRELLA MATRICULA
    private JMenuItem consulta1;
    private JMenuItem consulta2;
    private JMenuItem consulta3;
    
    private ConsultasDatamart consultar;
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JPanel cp_torta;
    private org.jfree.chart.JFreeChart jfc_torta;
    private javax.swing.JPanel jp_menuEstrellas;
    private javax.swing.JTabbedPane jtp_pansGraficas;
    private org.jfree.chart.JFreeChart jfc_chartBarras, jfc_chartLineas;
    private org.jfree.chart.ChartPanel cp_barra, cp_lineas;
    private javax.swing.JScrollPane jsp_lineas, jsp_barras;
    // End of variables declaration//GEN-END:variables
}

//Clase Usada por JMenu para hacer la barra vertical y acomodar los items con despliegue de lado
class VerticalMenu extends JMenu {
        VerticalMenu(String label) {
            super(label);
            JPopupMenu pm = getPopupMenu();
            pm.setLayout(new BoxLayout(pm, BoxLayout.PAGE_AXIS));
        }

    @Override
        public Dimension getMinimumSize() {
            return getPreferredSize();
        }

    @Override
        public Dimension getMaximumSize() {
            return getPreferredSize();
        }

    @Override
        public void setPopupMenuVisible(boolean b) {
            boolean isVisible = isPopupMenuVisible();
            if (b != isVisible) {
                if ((b==true) && isShowing()) {
                    //Set location of popupMenu (pulldown or pullright).
                    //Perhaps this should be dictated by L&F.
                    int x = 0;
                    int y = 0;
                    Container parent = getParent();
                    if (parent instanceof JPopupMenu) {
                        x = 0;
                        y = getHeight();
                    } else {
                        x = getWidth();
                        y = 0;
                    }
                    getPopupMenu().show(this, x, y);
                } else {
                    getPopupMenu().setVisible(false);
                }
            }
        }
    }
